Skip to content

EchoImageFactorizationProp — (epi, mono) factorisation module-parameterised in TruncInterface#138

Merged
hyperpolymath merged 5 commits into
mainfrom
session/image-factorization-prop-module-param
May 28, 2026
Merged

EchoImageFactorizationProp — (epi, mono) factorisation module-parameterised in TruncInterface#138
hyperpolymath merged 5 commits into
mainfrom
session/image-factorization-prop-module-param

Conversation

@hyperpolymath
Copy link
Copy Markdown
Owner

Summary

Closes the (epi, mono) earn-back gate flagged by EchoImageFactorization's preamble. The propositional truncation ∥_∥ is taken as an explicit module parameter rather than postulated, mirroring the funext-as-module-parameter discipline of EchoOFSUnivF5 (R-2026-05-18 narrowing).

What lands

New module EchoImageFactorizationProp:

  • TruncInterface (record) — packages the four ∥_∥ obligations: Trunc, ∣_∣, is-prop, rec. Consumer-pluggable (Cubical's ∥_∥₋₁, hand-rolled HIT, or postulated interface).
  • module ImageProp (T : TruncInterface ℓ) (f : A → B) with:
    • Image-prop := Σ B (λ y → Trunc (Echo f y)) — the (-1)-truncated image
    • prop-factor-left / prop-factor-right / prop-factor-commutes — the factorisation legs + triangle
    • prop-factor-right-injective — MONO side via is-prop on the truncated second component
    • prop-factor-left-mere-surjective — EPI side via rec into the truncated preimage Σ

The mere-surjectivity + injectivity pair is exactly the (epi, mono) discipline in the category of sets with propositional surjectivity.

What this does NOT prove

The (epi, mono) factorisation lands AT the truncation interface; it does NOT construct the truncation itself. Under the TruncInterface parameter, the proof goes through K-free with zero postulates in this module.

Build invariant

  • EchoImageFactorizationProp.agda compiles standalone under --safe --without-K, zero postulates, no funext.
  • Wired into proofs/agda/All.agda adjacent to EchoImageFactorization, pinned in proofs/agda/Smoke.agda under its own using block.

Test plan

  • Module compiles standalone, exit 0, no postulates.
  • Top-level All / Smoke via CI.
  • Triangle (prop-factor-commutes) is definitional.
  • Mono side uses only is-prop; epi side uses only rec + is-prop; no funext.

…erised in TruncInterface

Closes the (epi, mono) earn-back gate that EchoImageFactorization's
preamble flagged.  The propositional truncation `∥_∥` is taken as
an explicit module parameter rather than postulated, in the spirit
of the funext-as-module-parameter discipline used in EchoOFSUnivF5
(R-2026-05-18 narrowing).

New module `EchoImageFactorizationProp`:

* `TruncInterface` (record) — packages the four ∥_∥ obligations:
  - `Trunc : Set ℓ → Set ℓ`
  - `∣_∣ : A → Trunc A`
  - `is-prop : ∀ x y → x ≡ y`
  - `rec : (B-is-prop) → (A → B) → Trunc A → B`
  Any consumer can instantiate with Cubical's `∥_∥₋₁`, a hand-rolled
  HIT under different flags, or a postulated interface (consumer's
  honest-scope discipline).

* `module ImageProp (T : TruncInterface ℓ) (f : A → B)`:
  - `Image-prop := Σ B (λ y → Trunc (Echo f y))` — the (-1)-truncated
    image (each fibre collapsed to a prop).
  - `prop-factor-left : A → Image-prop` — left leg `a ↦ (f a, ∣ echo-intro a ∣)`.
  - `prop-factor-right : Image-prop → B` — right leg = proj₁.
  - `prop-factor-commutes` — triangle (definitional).
  - `prop-factor-right-injective` — MONO side via `is-prop` on the
    truncated second component.
  - `prop-factor-left-mere-surjective` — EPI side via `rec` into the
    truncated preimage Σ.

## What this proves and does not prove

The factorisation here is the standard (-1)-truncated form: the
right leg is set-injective ("mono"), the left leg is merely
surjective onto the image ("epi" under propositional surjectivity).
The mere-surjectivity + injectivity pair is exactly the (epi, mono)
discipline in the category of sets with propositional truncation.

The (epi, mono) factorisation lands AT the truncation interface; it
does NOT construct the truncation itself.  Under the `TruncInterface`
parameter, the proof goes through K-free with zero postulates in
this module.

## Build invariant

* `EchoImageFactorizationProp.agda` compiles standalone under
  `--safe --without-K`, zero postulates, no funext.  (Local "stdlib
  cubical-compat warnings" are unrelated env noise — see
  EchoTotalCompletion / Smoke top-level for the same warnings.)
* Wired into `proofs/agda/All.agda` adjacent to
  `EchoImageFactorization`, pinned in `proofs/agda/Smoke.agda`
  under its own `using` block with header comment.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@hyperpolymath hyperpolymath enabled auto-merge May 28, 2026 08:17
@@ -0,0 +1,193 @@
{-# OPTIONS --safe --without-K #-}
@github-actions
Copy link
Copy Markdown

🔍 Hypatia Security Scan

Findings: 70 issues detected

Severity Count
🔴 Critical 17
🟠 High 33
🟡 Medium 20

⚠️ Action Required: Critical security issues found!

View findings
[
  {
    "reason": "No test directory or test files found",
    "type": "no_tests",
    "file": "/home/runner/work/echo-types/echo-types",
    "action": "flag",
    "rule_module": "honest_completion",
    "severity": "high",
    "deduction": 20
  },
  {
    "reason": "Issue in secret-scanner.yml",
    "type": "missing_workflow",
    "file": "secret-scanner.yml",
    "action": "create",
    "rule_module": "workflow_audit",
    "severity": "high"
  },
  {
    "reason": "Issue in agda.yml",
    "type": "unknown",
    "file": "agda.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in agda.yml",
    "type": "unknown",
    "file": "agda.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in governance.yml",
    "type": "unknown",
    "file": "governance.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in hypatia-scan.yml",
    "type": "unknown",
    "file": "hypatia-scan.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in mirror.yml",
    "type": "unknown",
    "file": "mirror.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in scorecard.yml",
    "type": "unknown",
    "file": "scorecard.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Agda postulate assumes without proof -- potential soundness hole (1 occurrences, CWE-704)",
    "type": "agda_postulate",
    "file": "/home/runner/work/echo-types/echo-types/tutorial/provenance_debugging/ProvenanceDebugging.agda",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "critical"
  },
  {
    "reason": "Agda postulate assumes without proof -- potential soundness hole (1 occurrences, CWE-704)",
    "type": "agda_postulate",
    "file": "/home/runner/work/echo-types/echo-types/tutorial/epistemic_erasure/EpistemicErasure.agda",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "critical"
  }
]

Powered by Hypatia Neurosymbolic CI/CD Intelligence

@github-actions
Copy link
Copy Markdown

🔍 Hypatia Security Scan

Findings: 70 issues detected

Severity Count
🔴 Critical 17
🟠 High 33
🟡 Medium 20

⚠️ Action Required: Critical security issues found!

View findings
[
  {
    "reason": "No test directory or test files found",
    "type": "no_tests",
    "file": "/home/runner/work/echo-types/echo-types",
    "action": "flag",
    "rule_module": "honest_completion",
    "severity": "high",
    "deduction": 20
  },
  {
    "reason": "Issue in secret-scanner.yml",
    "type": "missing_workflow",
    "file": "secret-scanner.yml",
    "action": "create",
    "rule_module": "workflow_audit",
    "severity": "high"
  },
  {
    "reason": "Issue in agda.yml",
    "type": "unknown",
    "file": "agda.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in agda.yml",
    "type": "unknown",
    "file": "agda.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in governance.yml",
    "type": "unknown",
    "file": "governance.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in hypatia-scan.yml",
    "type": "unknown",
    "file": "hypatia-scan.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in mirror.yml",
    "type": "unknown",
    "file": "mirror.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in scorecard.yml",
    "type": "unknown",
    "file": "scorecard.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Agda postulate assumes without proof -- potential soundness hole (1 occurrences, CWE-704)",
    "type": "agda_postulate",
    "file": "/home/runner/work/echo-types/echo-types/tutorial/provenance_debugging/ProvenanceDebugging.agda",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "critical"
  },
  {
    "reason": "Agda postulate assumes without proof -- potential soundness hole (1 occurrences, CWE-704)",
    "type": "agda_postulate",
    "file": "/home/runner/work/echo-types/echo-types/tutorial/epistemic_erasure/EpistemicErasure.agda",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "critical"
  }
]

Powered by Hypatia Neurosymbolic CI/CD Intelligence

hyperpolymath and others added 3 commits May 28, 2026 09:37
The new (epi, mono) earn-back module needs an entry in the
classification table or kernel-guard.sh Check B fails. Adds it
adjacent to EchoImageFactorization in the Tier-2 list, with a
one-line annotation in the F5 cohort note explaining it as the
truncation-interface earn-back companion.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…://github.com/hyperpolymath/echo-types into session/image-factorization-prop-module-param

# Conflicts:
#	docs/echo-types/echo-kernel-note.adoc
@github-actions
Copy link
Copy Markdown

🔍 Hypatia Security Scan

Findings: 70 issues detected

Severity Count
🔴 Critical 17
🟠 High 33
🟡 Medium 20

⚠️ Action Required: Critical security issues found!

View findings
[
  {
    "reason": "No test directory or test files found",
    "type": "no_tests",
    "file": "/home/runner/work/echo-types/echo-types",
    "action": "flag",
    "rule_module": "honest_completion",
    "severity": "high",
    "deduction": 20
  },
  {
    "reason": "Issue in secret-scanner.yml",
    "type": "missing_workflow",
    "file": "secret-scanner.yml",
    "action": "create",
    "rule_module": "workflow_audit",
    "severity": "high"
  },
  {
    "reason": "Issue in agda.yml",
    "type": "unknown",
    "file": "agda.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in agda.yml",
    "type": "unknown",
    "file": "agda.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in governance.yml",
    "type": "unknown",
    "file": "governance.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in hypatia-scan.yml",
    "type": "unknown",
    "file": "hypatia-scan.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in mirror.yml",
    "type": "unknown",
    "file": "mirror.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Issue in scorecard.yml",
    "type": "unknown",
    "file": "scorecard.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Agda postulate assumes without proof -- potential soundness hole (1 occurrences, CWE-704)",
    "type": "agda_postulate",
    "file": "/home/runner/work/echo-types/echo-types/tutorial/epistemic_erasure/EpistemicErasure.agda",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "critical"
  },
  {
    "reason": "Agda postulate assumes without proof -- potential soundness hole (1 occurrences, CWE-704)",
    "type": "agda_postulate",
    "file": "/home/runner/work/echo-types/echo-types/tutorial/region_exit_audit/RegionExitAudit.agda",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "critical"
  }
]

Powered by Hypatia Neurosymbolic CI/CD Intelligence

@hyperpolymath hyperpolymath merged commit cbab984 into main May 28, 2026
12 of 13 checks passed
@hyperpolymath hyperpolymath deleted the session/image-factorization-prop-module-param branch May 28, 2026 08:41
hyperpolymath added a commit that referenced this pull request May 28, 2026
…ADME) (#144)

## Summary

Surgical narrative refresh across the five canonical doc surfaces
(CHANGELOG.md, EXPLAINME.adoc, docs/echo-types/MAP.adoc, README.md,
readme.adoc) to catch up with the six PRs that landed 2026-05-28: #136
(kernel-guard fix), #137 (Slice 3 prerequisites), #138
(EchoImageFactorizationProp), #139 (ResidueTaxonomy Search + Epistemic),
#140 (banner kit), #141 (Slice 3 headline).

## Changes per file

- **CHANGELOG.md** (+78 lines) — new \`### Added (2026-05-28)\` + \`###
Fixed (2026-05-28)\` blocks covering all six PRs with honest framing
(Slice 3 headline closure described as "under a strict-head premise";
bpsi=bpsi-at-equal-markers caller-burden sub-case explicitly NOT
closed).
- **EXPLAINME.adoc** (+4 lines) — status-snapshot bullets for Slice 3,
canonical identity layer extensions, and CI / foundational hygiene; new
\`docs/echo-types/echo-kernel-note.adoc\` entry in "Where to look
first".
- **docs/echo-types/MAP.adoc** (+14 / -9 net) — new (epi, mono) bullet
adjacent to image factorisation; ResidueForm instance count 4 → 6 with
Search + Epistemic named; Buchholz proofs list gains RankPowSlice3 +
RankPowSlice3Headline with strict-head-premise framing.
- **README.md** (+2 / -2) — Tier 1 + Tier 2 mermaid node labels updated
for ImageFactorizationProp + Search/Epistemic.
- **readme.adoc** (+2 / -1) — Tier 1 + Tier 2 list mirror updated.

## Verification

- \`scripts/kernel-guard.sh\` PASS (both Check A funext-free + Check B
classification-drift).
- No Agda code touched; docs-only refresh.

## Honesty constraints preserved

- Slice 3 headline framed as closed *under a strict-head premise*, not
unconditionally.
- bpsi=bpsi-at-equal-markers caller-burden sub-case explicitly named as
NOT closed (rank-adm / rank-lex remaining work).
- PR #136 framed as "infrastructure honesty, not a proof-content
advance".
- 11/13 per-constructor rank-mono count unchanged.

## Test plan

- [x] kernel-guard.sh PASS locally
- [ ] CI green on this PR
- [ ] Admin-merge once green or budget permits

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants